
package proyecto.formularios;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import proyecto.Nodo;
import proyecto.NodoAt;
import proyecto.NodoEntidad;

/**
 *

 */
public class CreateForm {
  
    public ArrayList<NodoAt> atributos = new ArrayList<NodoAt>();
    public String path;
    public ArrayList<String> entidades = new ArrayList<String>();
    public ArrayList<String> codJava = new ArrayList<String>();
    public ArrayList<String> codForm = new ArrayList<String>();
    public ArrayList<NodoEntidad> entidadDir = new ArrayList<NodoEntidad>();
    public ArrayList<String> formModificar= new ArrayList<String>();
    public ArrayList<String> javaModificar= new ArrayList<String>();
    public String hUtil = new String();
    public ArrayList<Nodo> metodos = new ArrayList<Nodo>();
    
    
    
    public CreateForm(){
        
    }
    
    public CreateForm(ArrayList<NodoAt> t, ArrayList<String> enti, String path,ArrayList<Nodo> metodo){
        atributos = t;
        this.path = path;
        entidades = enti;
        metodos = metodo;
        //System.out.println("metodos"+ metodos.get(0).GetName());
        
       
        
        
    }
    
    
    public void RetornaMetodos(){
        ArrayList<Nodo> temporal = new ArrayList<Nodo>();
        String aux = new String();
        String auxi[];
        
        //System.out.println("metodos" + metodos.size());
        for(int index = 0; index <metodos.size(); index++){
           // System.out.println(metodos.get(index).GetName());
            auxi= metodos.get(index).GetName().split(" ");
            aux = auxi[auxi.length-2].trim();
            temporal.add(new Nodo(aux.replace("( )",""), metodos.get(index).GetTipo()));   
            //System.out.println(aux.replace("( )","")+ " "+ metodos.get(index).GetTipo());
        }
        
        metodos = temporal;
        temporal.clear();
    }
       
    
    
    
    
    
    
    /**
     * Recorre array list entidades que contiene el nombre de las entidades que 
     * se generaron.. para obtener así las clases. form y .java que generan el 
     * formulario.
     * @param entidades : nombre de las entidaes
     */
    public void Formulario(ArrayList<String> entidades){
        String entidad = new String();
         LeeJava();  
        TablaForm();
        TablaJava();
         for(int index = 0; index < entidades.size(); index++){
                
            CreaForm(codJava, entidades.get(index).replace(".java","") + "Form");
            GeneraForm(codForm, entidades.get(index).replace(".java","")+"Form");
            GeneraModForm(formModificar, entidades.get(index).replace(".java","") + "Mod");
            GeneraModJava(javaModificar,entidades.get(index).replace(".java","") + "Mod");
            JOptionPane.showMessageDialog(null,"Se han generado con éxito");
            
        }
       
    }
    
    
    
    /**
     * Lee la plantilla del formulario, en la extension ".java"
     * 
     */
    
    public void LeeJava(){
     ArrayList<String> lineas = new ArrayList<String>();  
     //System.out.print("lee");
         try {
           
          FileReader fr = new FileReader("formulario.java");
           BufferedReader br = new BufferedReader(fr);
           String entrada = new String();
          // nombreEntity = entidad;
         //  System.out.print(archivo.getAbsoluteFile());
            while((entrada=br.readLine())!=null)
               {
                 lineas.add(entrada);                    
                
               }
             codJava = lineas; 
             //System.out.print(datos.get(1));
                                                                     
                
        } catch (IOException ex) {
            
        }     
        
    }
    
    
    public void SetEntidad(ArrayList<NodoEntidad> ent){
        entidadDir = ent;
    }
    
    /**
     * 
     * @param dir tiene el nombre y path de los archivos java, y de configuracion
     * @return retorna el nombre del paquete y clase a importar
     */
    public String DirHibernate(ArrayList<NodoEntidad> dir){
        
        String cadena = new String();
        String nom = new String();
        String direccion = new String();
        
        for(int index = 0 ; index < dir.size(); index++){
            
            if(dir.get(index).GetNombre().trim().equals("HibernateUtil.java")){
                
                direccion = dir.get(index).GetPath();
                index = dir.size()-1;
                nom = dir.get(index).GetNombre().replace(".java","");
            }
            
        }
        String[] aux ;
        
        aux = direccion.split("/");
        
        direccion = aux[aux.length-1];
        cadena = direccion +"."+ nom+ ";";
        hUtil= nom;
        return cadena;
    }
    
    
    // retorna el nomnbre del paquete en el cual se encuentra la entidad
    //para importarla al formulario creado
    
    public String DirClass(ArrayList<NodoEntidad> dir, String entidad){
        
        String cadena = new String();
        String nom = new String();
        String direccion = new String();
        
        for(int index = 0 ; index < dir.size(); index++){
          //  System.out.println("entidad " + entidad);
            if(dir.get(index).GetNombre().trim().equals(entidad.replace("Mod",".java"))){
                
                direccion = dir.get(index).GetPath();
                index = dir.size()-1;
                nom = dir.get(index).GetNombre().replace(".java","")+ ";";
                cadena = direccion +"."+ entidad.replace("Mod","")+ ";";
                
            }
            if(dir.get(index).GetNombre().trim().equals(entidad.replace("Form",".java"))){
                direccion = dir.get(index).GetPath();
                index = dir.size()-1;
                nom = dir.get(index).GetNombre().replace(".java","")+ ";";
                cadena= direccion + "."+ entidad.replace("Form","")+ ";";
            }
            
        }
        String[] aux ;
      
              
        return cadena;
                               
    }
    
    // Escribe en un nuevo archivo .java las caracteristicas del formulario
    // para la entidad dada..
    public void CreaForm(ArrayList<String> lineas, String entidad){
       boolean vertical = false ;
       boolean horizontal= false;
       boolean e = false;
        
        
        try {
         
           
           File dir = new File(path+"/src/Generado");
           dir.mkdir(); 
           
           File archivo = new File(path+"/src/Generado/"+entidad+ ".java");
           //JOptionPane.showMessageDialog(null,archivo.getAbsolutePath());
            FileWriter fw = new FileWriter(archivo) ;
            PrintWriter pw = new PrintWriter(fw) ;
            boolean f = false;
            
            for(int index = 0; index<lineas.size(); index++)
            {
                e = false;
                  
                //cambia nombre paquete
                if(lineas.get(index).contains("package"))
                   {
                       pw.println(lineas.get(index).replace("proyecto.formularios","Generado"));
                       pw.println("import "+ DirHibernate(entidadDir));
                       pw.println("import "+ DirClass(entidadDir,entidad));
                       f = true;
                    }
                        
                else
                   {
                     //cambia nombre a clase por el nombre de la entidad
                     if(lineas.get(index).contains("formulario"))
                      {
                         pw.println(lineas.get(index).replace("formulario", entidad));
                          f = true;
                   /**si la linea es la del encabezado de la clase, es decir extiende a jFrame
                    * entonces se realiza la declaracion de los labels, y textifield a utilizar
                    */
                   
                      if(lineas.get(index).contains("extends"))
                      {
                       
                        for(int i = 0; i< atributos.size(); i++)
                        {
                            if(atributos.get(i).GetEntity().equals(entidad.replace("Form",".java" ))) 
                             {   
                                pw.println("private javax.swing.JLabel "+atributos.get(i).GetName()+"L"+ ";") ;
                                pw.println("private javax.swing.JTextField "+ atributos.get(i).GetName()+"T;" );
                       
                             }
                        } //end for
                       } // enf if declara labels y texts
                   
                      }
                
                  else{
                         
                      
                     
                      pw.println(lineas.get(index));
                         
                     if(lineas.get(index).contains("private void initComponents"))
                     {
                       
                        System.out.println("for..");
                        pw.println("");
                        
                         for(int i = 0; i< atributos.size(); i++)
                         {
                       
                          //declaracion de las etiquetas y cajas de texo a utilizar
                           if(atributos.get(i).GetEntity().equals(entidad.replace("Form",".java" )))  
                           {   
                               pw.println(atributos.get(i).GetName()+"L"+" = new javax.swing.JLabel() "+ ";") ;
                               pw.println(atributos.get(i).GetName()+"T" + "= new javax.swing.JTextField() ;" );
                          // System.out.println(atributos.get(i).GetName());                             
                           }
                         } //end for 
                      }
                      
                      //escribe las lineas necesarias para insertar los datos en la bd
                      if(lineas.get(index).contains("bInsertar.setText"))
                      {
                    
                        pw.println("");
                        for(int i = 0; i< atributos.size(); i++)
                        {
                           /**System.out.println(atributos.get(i).GetEntity());
                             *  //set el texto de las etiquetas.. y limpia las cajas de texto
                             *  if(atributos.get(i).GetEntity().replace(".java","").equals(entidad.replace("Form","" )))
                             * //JOptionPane.showMessageDialog(null,"entidad"+ entidad + "  atributos.get "+ atributos.get(i).GetEntity());
                             */
                           
                                   
                           if(atributos.get(i).GetEntity().replace(".java","").equals(entidad.replace("Form","")))
                            {
                                pw.println(atributos.get(i).GetName()+"L"+".setText("+'"'+atributos.get(i).GetName()+'"'+");") ;
                                pw.println(atributos.get(i).GetName()+"T"+ ".setText(" + '"'+"                          "+'"'+ ");" );
                   
                            }  
                          }//fin for set
                      } // fin if set..
                    
                   
                   if(lineas.get(index).contains("jLabel1.setText"))
                    {
                       pw.println("jLabel1.setText("+ '"'+ entidad+ '"' + ");");
                    }
                   
                   if(lineas.get(index).contains("layout.setHorizontalGroup("))
                   {
                       horizontal = true;
                      
                       
                   }
                   //agregar etiquetas al layout
                   if(lineas.get(index).contains(".addComponent(jLabel2)") && horizontal == true && vertical == false)
                   {
                      
                       for(int i = 0; i< atributos.size(); i++)
                       {
                           //System.out.println(atributos.get(i).GetEntity());
                            //set el texto de las etiquetas.. y limpia las cajas de texto
                           if(atributos.get(i).GetEntity().equals(entidad.replace("Form",".java" )))  
                           {   
                              pw.println("             .addComponent("+atributos.get(i).GetName()+"L"+")") ;
                          
                           }  
                        }//fin for set
                      } // fin if add component
                   
                   if(lineas.get(index).contains(".addComponent(jTextField1,") && horizontal == true && vertical == false)
                   {
                       
                        for(int i = 0; i< atributos.size(); i++)
                        {
                    
                            //agregar componente al layout
                           if(atributos.get(i).GetEntity().equals(entidad.replace("Form",".java" ))) 
                           {   
                              pw.println(".addComponent("+atributos.get(i).GetName()+"T"+", javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)") ;
                                 
                           }  
                        }//fin for set
                    }
                   
                   
                   if(lineas.get(index).contains("layout.setVerticalGroup(")){
                       vertical = true;
                    
                       
                   }
                   
                   if(lineas.get(index).contains(".addGap(69, 69, 69)") && vertical == true)
                   {
                      // pw.println(lineas.get(index));
                       for(int i = 0; i< atributos.size(); i++)
                       {
                           //System.out.println(atributos.get(i).GetEntity());
                            //set el texto de las etiquetas.. y limpia las cajas de texto
                           if(atributos.get(i).GetEntity().equals(entidad.replace("Form",".java" )))  
                           {   
                                pw.println(".addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)");                         
                                pw.println(".addComponent(" + atributos.get(i).GetName()+"L"+")");
                                pw.println(".addComponent(" + atributos.get(i).GetName()+"T"+", javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))");
                                pw.println(".addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)");
                          
                          // System.out.println(atributos.get(i).GetName());                             
                           }  
                        }//fin for 
                                     
                   }// fin if grupos....
                   
                   if(lineas.get(index).contains("private void bInsertarActionPerformed(java.awt.event.ActionEvent evt)"))
                   {
                       pw.println("Session session = "+hUtil.replace(";","") +".getSessionFactory().openSession();");
                       pw.println("Transaction tx = session.beginTransaction();");
                       String aux= MetodoInsert(atributos, entidad);
                       pw.println(aux.substring(0,aux.length()-1)+ ");");
                       pw.println("session.save("+" var"+entidad.replace("Form","").trim()+");");
                       pw.println("tx.commit();");
                                
                       
                   }
                   
                   if(lineas.get(index).contains("private void bActualizarActionPerformed(java.awt.event.ActionEvent evt) {"))
                   {
                       //JOptionPane.showMessageDialog(null, "people");
                       pw.println("Session session = HibernateUtil.getSessionFactory().openSession();");
                       pw.println("Transaction tx = session.beginTransaction();");
                       String aux= MetodoUpdate(atributos, entidad);
                       pw.println(aux.substring(0,aux.length()-1)+ ");");
                       pw.println("session.update("+" var"+entidad.replace("Form","").trim()+");");
                       pw.println("tx.commit();");
                                
                       
                   }
                   
                   if(lineas.get(index).contains("private void bEliminarActionPerformed(java.awt.event.ActionEvent evt) {"))
                   {
                      // JOptionPane.showMessageDialog(null, "people");
                       pw.println("Session session = HibernateUtil.getSessionFactory().openSession();");
                       pw.println("Transaction tx = session.beginTransaction();");
                       String aux= MetodoDelete(atributos, entidad);
                       pw.println(aux.substring(0,aux.length()-1)+ ");");
                       pw.println("session.delete("+" var"+entidad.replace("Form","").trim()+");");
                       pw.println("tx.commit();");
                                
                       
                   }
                      
                      
                
                      
                } // fin else..
                }
                 
                      
                      
        }//fin for 
            
            fw.close() ;
        }catch (IOException ex) {
            
        }
        
    }

    /*
     * lee las lineas del .FORM  y las guarda en un arraylist
     */
    public void CargaForm(){
      
        ArrayList<String> lineas = new ArrayList<String>();  
     
         try {
           
          
           FileReader fr = new FileReader("formulario.form");
           BufferedReader br = new BufferedReader(fr);
           String entrada = new String();
          
            while((entrada=br.readLine())!=null)
               {
                 lineas.add(entrada);                    
                
               }
             codForm = lineas; 
             
                                                                     
                
        } catch (IOException ex) {}
            
        }     
      
    public void TablaForm(){
         ArrayList<String> lineas = new ArrayList<String>();  
     //System.out.print("lee");
         try {
           
          
           FileReader fr = new FileReader("ptable.form");
           BufferedReader br = new BufferedReader(fr);
           String entrada = new String();
          
            while((entrada=br.readLine())!=null)
               {
                 lineas.add(entrada);                    
                
               }
             formModificar = lineas; 
             //System.out.print(datos.get(1));
                                                                     
                
        } catch (IOException ex) {
            
        }    
    }
    
    public void TablaJava(){
        ArrayList<String> lineas = new ArrayList<String>();  
     //System.out.print("lee");
         try {
           
          
           FileReader fr = new FileReader("ptable.java");
           BufferedReader br = new BufferedReader(fr);
           String entrada = new String();
          
            while((entrada=br.readLine())!=null)
               {
                 lineas.add(entrada);  
                 
                
               }
             javaModificar = lineas; 
             //System.out.print(datos.get(1));
                                                                     
                
        } catch (IOException ex) {
            
        }    
    }
    
    public void GeneraModJava(ArrayList<String> lineas, String entidad)    {
      
         try {
                   
         
           
           File archivo = new File(path+"/src/Generado/"+entidad+ ".java");
           
            FileWriter fw = new FileWriter(archivo) ;
            PrintWriter pw = new PrintWriter(fw) ;
            boolean f = false;
            boolean e = false;
            for(int index = 0; index<lineas.size(); index++){
                  e = false;
                // System.out.println(lineas.get(index))       ;
                //cambia nombre paquete
                  if(lineas.get(index).contains("package"))
                   {
                       pw.println(lineas.get(index).replace("proyecto.formularios","Generado"));
                       pw.println("import "+ DirHibernate(entidadDir));
                       pw.println("import "+ DirClass(entidadDir,entidad));
                       f = true;
                    }
                        
                else
                 {
                     //cambia nombre a clase por el nombre de la entidad
                  if(lineas.get(index).contains("ptable"))
                   {
                   pw.println(lineas.get(index).replace("ptable", entidad));
                   f = true;
                   
                 
                      }
                
                  else{
                      
                      if(lineas.get(index).contains(" executeHQLQuery("+'"'+"from Myempleados"+'"'+");")== true){
                         pw.println("executeHQLQuery("+'"'+"from "+entidad.replace("Mod", "")+'"'+");"); 
                        e = true; 
                      }
                      
                      if(lineas.get(index).contains("tableHeaders.add(")){
                          
                          for(int i = 0; i< atributos.size(); i++)
                           {
                                 
                             if(atributos.get(i).GetEntity().equals(entidad.replace("Mod",".java" )))  {   
                                pw.println("tableHeaders.add("+'"'+ atributos.get(i).GetName()+'"'+");");
                               
                                } //end if  
                           
                           }
                          e = true;
                      }
                      
                      if(lineas.get(index).contains("Session session = NewHibernateUtil.getSessionFactory().openSession()")){
                          pw.println("Session session = "+ hUtil+".getSessionFactory().openSession();");
                          e = true;
                            
                      }
                      
                      if(lineas.get(index).contains("ArrayList<Myempleados> milista = new ArrayList<Myempleados>();")){
                          pw.println("ArrayList<"+entidad.replace("Mod","")+"> milista = new ArrayList<Myempleados>();");
                          e = true;
                      }
                      
                      if(lineas.get(index).contains("Myempleados employee=(Myempleados)o;")){
                          pw.println(entidad.replace("Mod","")+" varEntidad =("+entidad.replace("Mod","")+")o;");
                          e = true;
                      }
                      if(lineas.get(index).contains("Vector<Object> oneRow = new Vector<Object>();")){
                          pw.println(lineas.get(index));
                         // System.out.println(metodos.size());
                          for(int i = 0; i<metodos.size(); i++){
                           //   System.out.println("Metodod.."+metodos.get(i).GetName());
                              if(metodos.get(i).GetTipo().replace(".java","").equals(entidad.replace("Mod",""))){
                                  pw.println("oneRow.add(varEntidad."+metodos.get(i).GetName().trim() +");");
                                 // System.out.println("metodos"+ "oneRow.add(varEntidad."+metodos.get(i).GetName() + "());");
                                  
                              }
                              
                              
                          }
                          
                          e = true;
                          
                      }
                      
                      if(e == false){
                          pw.println(lineas.get(index));
                      }
                      
                         
                  }
                 }
                   }//fin for 
            
            fw.close() ;
        }catch (IOException ex) {}
            
                   
    }
    
    public void GeneraModForm(ArrayList<String> lineas, String entidad){
           try {
                   
           
           File archivo = new File(path+"/src/Generado/"+entidad+ ".form");
           
            FileWriter fw = new FileWriter(archivo) ;
            PrintWriter pw = new PrintWriter(fw) ;
            boolean f = false;
            for(int index = 0; index<lineas.size(); index++){
                  
                        
                
                   pw.println(lineas.get(index));
                 
                   }//fin for 
            
            fw.close() ;
        }catch (IOException ex) {}
            
    }
 
    
    
    //Sin modificar... solamente la plantilla
    public void Crea(ArrayList<String> lineas, String entidad){
        
        try {
          // System.out.print(path + " crea");  
           
           File dir = new File(path+"/src/Generado");
           dir.mkdir();
           
           File archivo = new File(path+"/src/Generado/"+entidad+ ".java");
           //JOptionPane.showMessageDialog(null,archivo.getAbsolutePath());
            FileWriter fw = new FileWriter(archivo) ;
            PrintWriter pw = new PrintWriter(fw) ;
            boolean f = false;
            for(int index = 0; index<lineas.size(); index++){
                  
                        
                //cambia nombre paquete
                 if(lineas.get(index).contains("package"))
                   {
                        pw.println(lineas.get(index).replace("proyecto.formularios","Generado"));
                        f = true;
                    }
                        
                else
                 {
                     //cambia nombre a clase por el nombre de la entidad
                  if(lineas.get(index).contains("formulario"))
                   {
                   pw.println(lineas.get(index).replace("formulario", entidad));
                   f = true;
                   
                 
                      }
                
                  else{
                      
                         pw.println(lineas.get(index));
                         
//                     
                      }
                }
                 
                   
            
                      
                      
        }//fin for 
            
            fw.close() ;
        }catch (IOException ex) {
            
        }
        
        
    }
    
    /**
     * 
     * @param lineas : contiene las "lineas" de la plantilla del formulario en extensión .FORM
     * @param entidad : el nombre de la entidad de la cual se esta generando el frame
     */
    public void GeneraForm(ArrayList<String> lineas,String entidad){
            
        
        
      try {
           //System.out.print(path + " crea");  
           boolean vertical = false;
            boolean horizontal = false;
            boolean l = false;
            boolean text = false;
            boolean sc = false;
            boolean g = false;
            
           File dir = new File(path+"/src/Generado");
           dir.mkdir();
           
           File archivo = new File(path+"/src/Generado/"+entidad+ ".form");
           //JOptionPane.showMessageDialog(null,archivo.getAbsolutePath());
            FileWriter fw = new FileWriter(archivo) ;
            PrintWriter pw = new PrintWriter(fw) ;
            boolean f = false;
            
                 for(int index = 0; index<lineas.size(); index++)
                 {
                     
                     if(lineas.get(index).contains("<DimensionLayout dim="+'"'+"0"+ '"'+">")){
                         horizontal = true;
                       //  System.out.print(lineas.get(index));
                     }
                     
                     if(lineas.get(index).contains("<Component id="+'"'+"jLabel4") && horizontal== true && l== false )
                     {
                           for(int i = 0; i< atributos.size(); i++)
                           {
                                 
                             if(atributos.get(i).GetEntity().equals(entidad.replace("Form",".java" )))  {   
                                pw.println("<Component id="+'"'+atributos.get(i).GetName().trim()+"L"+'"'+" alignment="+'"'+"1"+'"'+" min="+ '"'+"-2"+'"'+" max="+'"'+"-2"+'"'+" attributes="+'"'+"0"+'"'+"/>");
                               // System.out.println(atributos.get(i).GetName());                             
                                } //end if  
                           
                           }//fin for set
                           l = true; 
                            
                        } //end if componentes
                                
                      if(lineas.get(index).contains("<Component id="+'"'+"jTextField3") && horizontal== true && text== false )
                        {
                             for(int i = 0; i< atributos.size(); i++)
                             {
                                 
                                 if(atributos.get(i).GetEntity().equals(entidad.replace("Form",".java" )))  
                                 {   
                                 pw.println("<Component id="+'"'+atributos.get(i).GetName().trim()+"T"+'"'+" min="+ '"'+"-2"+'"'+" max="+'"'+"-2"+'"'+" attributes="+'"'+"0"+'"'+"/>");
                                 // System.out.println(atributos.get(i).GetName());                             
                                 } //en if entidades 
                           
                              }//fin for set
                          text = true; 
                            
                        } // if text 
                              
                       if(lineas.get(index).contains( "<Component id="+'"'+"jTextField3"+'"'+" alignment="+'"'+"3"+'"'+" min="+'"'+"-2"+'"'+" max="+'"'+"-2"+'"'+" attributes="+'"'+"0"+'"'+"/>") && horizontal == true &&text == true)       
                       {
                           //pw.println(f);
                           vertical = true;
                         //  System.out.print(lineas.get(index));
                       }  
                           
                       if(lineas.get(index).contains("</Group>") && vertical == true&& l == true && g == false)     
                       {
                            pw.println(lineas.get(index));
                            for(int i = 0; i< atributos.size(); i++)
                            {
                                 
                                if(atributos.get(i).GetEntity().equals(entidad.replace("Form",".java" ))) 
                                {   
                                  pw.println("<EmptySpace max="+'"'+"-2"+'"'+" attributes="+'"'+"0"+'"'+"/>");
                                  pw.println("<Group type="+'"'+"103" +'"' +" groupAlignment="+'"'+"3"+'"'+" attributes="+'"'+"0"+'"'+">");
                                  pw.println("<Component id="+'"'+atributos.get(i).GetName().trim()+"L"+'"'+" alignment="+'"'+"3"+'"'+" min="+ '"'+"-2"+'"'+" max="+'"'+"-2"+'"'+" attributes="+'"'+"0"+'"'+"/>");
                                  pw.println("<Component id="+'"'+atributos.get(i).GetName().trim()+"T"+'"'+" alignment="+'"'+"3"+'"'+" min="+ '"'+"-2"+'"'+" max="+'"'+"-2"+'"'+" attributes="+'"'+"0"+'"'+"/>");
                                  pw.println("</Group>");
                                }
                             
                          // System.out.println(atributos.get(i).GetName());                             
                             }//fin for set
                           index++; 
                           g = true;
                           
                        } // if vertical....
                       
                               
                                              
                        if(lineas.get(index).contains("</SubComponents>"))      
                        {
                        
                         for(int i = 0; i< atributos.size(); i++)
                         {
                                 
                           if(atributos.get(i).GetEntity().equals(entidad.replace("Form",".java" )))  
                           { 
                               
                             pw.println(" <Component class="+'"'+"javax.swing.JLabel" +'"'+" name="+'"'+atributos.get(i).GetName().trim()+"L"+'"'+">");                                  
                             pw.println("<Properties>");
                             pw.println("<Property name="+'"'+"text" +'"'+" type="+'"'+"java.lang.String"+'"'+" value="+'"'+atributos.get(i).GetName().trim()+"L"+'"'+"/>");
                             pw.println("</Properties>");
                             pw.println("</Component>"); 
                               
                             pw.println(" <Component class="+'"'+"javax.swing.JTextField" +'"'+" name="+'"'+atributos.get(i).GetName().trim()+"T"+'"'+">");                                  
                             pw.println("<Properties>");
                             pw.println("<Property name="+'"'+"text" +'"'+" type="+'"'+"java.lang.String"+'"'+" value="+'"'+"              "+'"'+"/>");
                             pw.println("</Properties>");
                             pw.println("</Component>");
                             
                              
                            }  
                           
                          }//fin for set
                             pw.println(lineas.get(index));
                           
                         } // if vertical....          
                               
                                  
                        
                  else{
                            pw.println(lineas.get(index));
                       }
                         
                }//fin for 
    
              fw.close() ;
            }catch (IOException ex) {}   

           }
    
    
    /**
     * 
     * @param nodo: ,lista de todos los traibutos y tipos de las entidades definididas
     *               dentro del proyecto
     * @param entidad: nombre de la entidad de la cual se esta generando el formulario
     * @return : regresa la cadena del tipo NOmbre_clase variable.. = new NombreClase(variables constructor)
     * donde las variables del constructor se definen en base a los atributos de esa clase y se convierte
     * al tipo que requiera en caso lo necesite.
     */
    public String MetodoInsert(ArrayList<NodoAt> nodo, String entidad){
       
      ArrayList<String> variables = new ArrayList<String>();
    //  System.out.println(entidad);
      String var = entidad.replace("Form","")+ " var"+entidad.replace("Form","").trim()+ "= new "+ entidad.replace("Form","")+ "(";
      String inserta =""  ;
      String aux = "";
      boolean f = false;
      boolean band = false;
      
         for(int i = 0; i < nodo.size(); i++){
             band = false;
             //System.out.println("entidad array"+nodo.get(i).GetEntity());
            if((i<nodo.size()-1  && nodo.get(i+1).GetEntity().equals(entidad) && f ==false)) {
                f = true;
                aux = ");";
            }
//            if(i == nodo.size()-1&& nodo.get(i).GetEntity().equals(entidad)||nodo.get(i+1).GetEntity().equals(entidad)== false){
//                aux = ");";
//              }
              else{
                aux = ",";
               }
            if(nodo.get(i).GetEntity().replace(".java","").equals(entidad.replace("Form",""))){
                //System.out.println("if..!!!");
                
               //  System.out.println("int"+ nodo.get(i).GetTipo());
            if(nodo.get(i).GetTipo().trim().toUpperCase().equals("INT")== true)
            {              
              //System.out.println("int"+ nodo.get(i).GetTipo());
                var += "Integer.parseInt("+nodo.get(i).GetName().trim()+"T.getText())"+ aux;
                band = true;
            }
            if(nodo.get(i).GetTipo().trim().toUpperCase().equals("DOUBLE")== true){
                var += "new Double("+nodo.get(i).GetName().trim()+"T.getText())"+ aux;;
                band = true;
            }
            if(nodo.get(i).GetTipo().trim().toUpperCase().equals("FLOAT") == true){
                var += "new Float("+nodo.get(i).GetName().trim()+"T.getText())"+ aux;
                band = true;
            }
            if(nodo.get(i).GetTipo().trim().toUpperCase().equals("SHORT")== true){
                var += "Short.parseShort("+nodo.get(i).GetName().trim()+"T.getText())"+ aux;
                band = true;
            }
            if(nodo.get(i).GetTipo().trim().toUpperCase().equals("BOOLEAN")== true){
                var += "new Boolean("+nodo.get(i).GetName().trim()+"T.getText())"+ aux;
                band = true;
            }
            if(nodo.get(i).GetTipo().trim().toUpperCase().equals("SET")== true){
                 var += "null"+ aux;
                 band = true;
            }
              if(isEntidad(nodo.get(i).GetTipo().trim()) == true){
                 var+= "null"+ aux;
                 band = true;
             }   
                       
             if(band == false){
                var += nodo.get(i).GetName().trim()+"T.getText()"+ aux ;
                }
             
            
          }
        }
        
       
      return var;
        
    }
    
    
    public String MetodoUpdate(ArrayList<NodoAt> nodo, String entidad){
       
      ArrayList<String> variables = new ArrayList<String>();
      System.out.println(entidad);
      String var = entidad.replace("Form","")+ " var"+entidad.replace("Form","").trim()+ "= new "+ entidad.replace("Form","")+ "(";
      String inserta =""  ;
      String aux = "";
      boolean f = false;
      boolean band = false;
      
         for(int i = 0; i < nodo.size(); i++){
             band = false;
             //System.out.println("entidad array"+nodo.get(i).GetEntity());
            if((i<nodo.size()-1  && nodo.get(i+1).GetEntity().equals(entidad) && f ==false)) {
                f = true;
                aux = ");";
            }
//            if(i == nodo.size()-1&& nodo.get(i).GetEntity().equals(entidad)||nodo.get(i+1).GetEntity().equals(entidad)== false){
//                aux = ");";
//              }
              else{
                aux = ",";
               }
            if(nodo.get(i).GetEntity().replace(".java","").equals(entidad.replace("Form",""))){
               
                
               //((conversion de tipos para asignacion de las atributos al constructor de la entidad))
            if(nodo.get(i).GetTipo().trim().toUpperCase().equals("INT")== true)
            {              
              
                var += "Integer.parseInt("+nodo.get(i).GetName().trim()+"T.getText())"+ aux;
                band = true;
            }
            if(nodo.get(i).GetTipo().trim().toUpperCase().equals("DOUBLE")== true){
                var += "new Double("+nodo.get(i).GetName().trim()+"T.getText())"+ aux;;
                band = true;
            }
            if(nodo.get(i).GetTipo().trim().toUpperCase().equals("FLOAT") == true){
                var += "new Float("+nodo.get(i).GetName().trim()+"T.getText())"+ aux;
                band = true;
            }
            if(nodo.get(i).GetTipo().trim().toUpperCase().equals("SHORT")== true){
                var += "Short.parseShort("+nodo.get(i).GetName().trim()+"T.getText())"+ aux;
                band = true;
            }
            if(nodo.get(i).GetTipo().trim().toUpperCase().equals("BOOLEAN")== true){
                var += "new Boolean("+nodo.get(i).GetName().trim()+"T.getText())"+ aux;
                band = true;
            }
            if(nodo.get(i).GetTipo().trim().toUpperCase().equals("SET")== true){
                 var += "null"+ aux;
                 band = true;
            }
              if(isEntidad(nodo.get(i).GetTipo().trim()) == true){
                 var+= "null"+ aux;
                 band = true;
             }   
                       
             if(band == false){
                var += nodo.get(i).GetName().trim()+"T.getText()"+ aux ;
                }
             
            
          }
        
        }
        
       
      return var;
        
    }
   
   public String MetodoDelete(ArrayList<NodoAt> nodo, String entidad){
       
      ArrayList<String> variables = new ArrayList<String>();
      System.out.println(entidad);
      String var = entidad.replace("Form","")+ " var"+entidad.replace("Form","").trim()+ "= new "+ entidad.replace("Form","")+ "(";
      String inserta =""  ;
      String aux = "";
      boolean f = false;
     boolean band = false;
      
         for(int i = 0; i < nodo.size(); i++){
             band = false;
             //System.out.println("entidad array"+nodo.get(i).GetEntity());
            if((i<nodo.size()-1  && nodo.get(i+1).GetEntity().equals(entidad) && f ==false)) {
                f = true;
                aux = ");";
            }
//            if(i == nodo.size()-1&& nodo.get(i).GetEntity().equals(entidad)||nodo.get(i+1).GetEntity().equals(entidad)== false){
//                aux = ");";
//              }
              else{
                aux = ",";
               }
            if(nodo.get(i).GetEntity().replace(".java","").equals(entidad.replace("Form",""))){
                //System.out.println("if..!!!");
                
               //  System.out.println("int"+ nodo.get(i).GetTipo());
            if(nodo.get(i).GetTipo().trim().toUpperCase().equals("INT")== true)
            {              
              //System.out.println("int"+ nodo.get(i).GetTipo());
                var += "Integer.parseInt("+nodo.get(i).GetName().trim()+"T.getText())"+ aux;
                band = true;
            }
            if(nodo.get(i).GetTipo().trim().toUpperCase().equals("DOUBLE")== true){
                var += "new Double("+nodo.get(i).GetName().trim()+"T.getText())"+ aux;;
                band = true;
            }
            if(nodo.get(i).GetTipo().trim().toUpperCase().equals("FLOAT") == true){
                var += "new Float("+nodo.get(i).GetName().trim()+"T.getText())"+ aux;
                band = true;
            }
            if(nodo.get(i).GetTipo().trim().toUpperCase().equals("SHORT")== true){
                var += "Short.parseShort("+nodo.get(i).GetName().trim()+"T.getText())"+ aux;
                band = true;
            }
            if(nodo.get(i).GetTipo().trim().toUpperCase().equals("BOOLEAN")== true){
                var += "new Boolean("+nodo.get(i).GetName().trim()+"T.getText())"+ aux;
                band = true;
            }
            if(nodo.get(i).GetTipo().trim().toUpperCase().equals("SET")== true){
                 var += "null"+ aux;
                 band = true;
            }
              if(isEntidad(nodo.get(i).GetTipo().trim()) == true){
                 var+= "null"+ aux;
                 band = true;
             }   
                       
             if(band == false){
                var += nodo.get(i).GetName().trim()+"T.getText()"+ aux ;
                }
             
            
          }
        }
        
       
      return var;
        
    }
   
    
    public boolean isEntidad(String cad){
        boolean band = false;
       // System.out.println("entidad"+ cad);
        for(int x = 0; x <entidades.size(); x++){
            //System.out.println("array"+entidades.get(x));
            if(entidades.get(x).contains(cad)){
               // System.out.println("array"+entidades.get(x));
                band = true;
            }
        }
        
        return band;
    }
    
    
}
